Fixed path-relativization error when traversing different partitions #658
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
It happened on MacOSX, but I do not exclude it may happen in other OS too: when building some large sketch for Arduino Due, the system libsam_xxx.a library is transformed to relative path, in particular the path
/Users/cmaglie/Library/Arduino15/packages/arduino/hardware/sam/1.6.12/variants/arduino_due_x/libsam_sam3x8e_gcc_rel.a
is made relative to the build folder
/var/folder/x8/ttjf_wrd63823894128467832/T/arduino_build_988374/
but since both paths resides in different partitions the result is:
../../../../../../Users/cmaglie/Library/Arduino15/packages/arduino/hardware/sam/1.6.12/variants/arduino_due_x/libsam_sam3x8e_gcc_rel.a
so it traverse from
/var/..../arduino_build_988374
to the root and descend back into/Users/...
This is bad for two reasons:
the resulting "relative" path is longer than the original "absolute" path, defeating the purpose of the transformation.
for some weird reason gcc is unable to find the libsam file using the relative path. It seems that when running inside
/var/...
it cannot "escape" to/Users/...
This patch avoid the situation above by adding a check for the presence of
..
in the resulting path (basically avoiding path relativization outside of the build folder) and by checking that the resulting path is shorter than the original absolute path.